package io.sdph.userprofile;


import io.sdph.userprofile.dao.UserManagerDAO;
import io.sdph.userprofile.exceptions.UserProfileException;
import io.sdph.userprofile.model.User;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Service;

/**
 * Klasa managera do zarządzania użytkownikami.
 *
 * @author Adrian Szwajkowski, Tomasz Korpowski
 * @since 0.0.1
 */
@Service
public class UserManager implements IUserManager{

	@Autowired
    private UserManagerDAO userManagerDAO;
    boolean hasError = false;
    
    @Override
    public void addUser(User user, String password) throws UserProfileException {
        hasError = userManagerDAO.saveUser(user, password);
        if( hasError ) throw new UserProfileException("Dodawnie użytkownika nie powiodło się.");
    }

    @Override
    public void modifyUser(User user, String password) throws UserProfileException {
    	// TODO dlaczego hasło jest wymagane przy modyfikacji użytkownika?
        hasError = userManagerDAO.saveUser(user, password);
        if( hasError ) throw new UserProfileException("Modyfikowanie użytkownika nie powiodło się.");
    }

    @Override
    public void deleteUser(User user) throws UserProfileException {
        hasError = userManagerDAO.deleteUser(user);
        if( hasError ) throw new UserProfileException("Usuwanie użytkownika nie powiodło się.");
    }

    @Override
    public User getUser(String userId) throws UserProfileException {
        
        User user = userManagerDAO.getUser(userId);
        
        if( user == null ) throw new UserProfileException("Nie można pobrać danych użytkownika.");
        return user;
    }

    @Override
    public List<User> getUsers() throws UserProfileException {
        
        List<User> users = new ArrayList<User>();
        users = userManagerDAO.getUsers();
        
        if ( users == null) throw new UserProfileException("Nie można pobrać danych użytkowników.");
        return users;
    }
 
}
